package cn.iocoder.yudao.module.promotion.gift.pojo.po;

import cn.iocoder.yudao.framework.business.basic.pojo.po.MemberScopeEntity;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.api.promotion.gift.dto.GiftActivityVO;
import cn.iocoder.yudao.module.api.promotion.gift.enums.GiftBizType;
import cn.iocoder.yudao.module.api.promotion.gift.enums.GiftGiveType;
import cn.iocoder.yudao.module.api.promotion.gift.enums.GiftRecordStatus;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * <pre>
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 *  这里是文件说明
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 * </pre>
 *
 * @author 山野羡民（1032694760@qq.com）
 * @since 2025/03/18
 */
@TableName("promotion_gift_record")
@Data
public class GiftRecord extends MemberScopeEntity {
    /**
     * 店铺编号
     */
    private Long shopId;
    /**
     * 赠品活动编号
     */
    private Long giftActivityId;
    /**
     * 赠品活动快照数据，JSON格式
     */
    private String giftActivitySnapshot;

    /**
     * 赠品活动信息
     */
    @TableField(exist = false)
    private GiftActivityVO giftActivity;

    @SuppressWarnings("unused")
    public final GiftActivityVO getGiftActivity() {
        if (JsonUtils.isJson(getGiftActivitySnapshot())) {
            return JsonUtils.parseObject(getGiftActivitySnapshot(), GiftActivityVO.class);
        }
        return null;
    }

    /**
     * 赠品形式：0-线下产品、1-线上产品、2-优惠券
     *
     * @see GiftGiveType
     */
    private Integer giftType;

    /**
     * 产品 SPU 编号，赠品形式为线上产品时有效
     */
    private Long spuId;

    /**
     * 产品 SKU 编号，赠品形式为线上产品时有效
     */
    private Long skuId;

    /**
     * 线上优惠券模板编号，赠品形式为线上优惠券时有效
     */
    private Long couponTemplateId;

    /**
     * 业务类型：1-团购套餐、2-线下扫码、2-链动2+1、99-好友转赠
     *
     * @see GiftBizType
     */
    private Integer bizType;

    /**
     * 业务编号：团购订单编号、扫码订单编号、链动订单编号、好友用户编号
     */
    private Long bizId;

    /**
     * 状态：0-初始化、1-待领取、2-已领取、3-已过期、4-已转赠
     *
     * @see GiftRecordStatus
     */
    private Integer status;

    /**
     * 来源交易单号
     */
    private String tradeNo;

    /**
     * 原价，单位为分，0表示免费
     */
    private Integer originPrice;

    /**
     * 成本价。线下产品核销时暂时给用户看，用户可能需要线下协商支付给商家；线上产品兑换后需要分账给所属商家。
     */
    private Integer costPrice;

    /**
     * 领取时间
     */
    private LocalDateTime takeTime;

    /**
     * 转赠时间
     */
    private LocalDateTime transferTime;

    /**
     * 过期时间
     */
    private LocalDateTime expireTime;
}
